package com.yida.gwj.deposit.service;

import com.yida.common.core.web.domain.AjaxResult;
import com.yida.common.core.web.page.TableDataInfo;
import com.yida.gwj.common.domain.GwjBaseBuild;
import com.yida.gwj.deposit.domain.GwjDepositBusiness;
import com.yida.gwj.deposit.domain.GwjDepositBusinessHouse;
import com.yida.gwj.deposit.domain.GwjDepositBusinessLog;
import com.yida.gwj.deposit.domain.dto.*;
import com.yida.gwj.deposit.domain.request.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @Description 业务（单位批量缴费）Service接口
 * @Author wws
 * @Date 2023-02-17
 */
public interface IGwjUnitDepositBusinessService {

    /**
     * 分页查询
     * @param gwjDepositBusiness 查询参数
     * @return 单位批量缴费分页对象
     */
    List<GwjDepositPageDTO> getPage(GwjDepositBusiness gwjDepositBusiness);

    /**
     * 保存
     * @param gwjUnitDepositRequest 单位批量缴费参数
     * @return
     */
    Long save(GwjUnitDepositRequest gwjUnitDepositRequest);

    /**
     * 查询资金分户房屋列表
     * @param gwjDepositBusinessHouse 房屋查询参数
     * @return
     */
    TableDataInfo getHouseDetailList(GwjDepositBusinessHouse gwjDepositBusinessHouse);

    /**
     * 查询缴存清册
     * @param bizId 业务主键
     * @return
     */
    List<GwjDepositBuildRecordDTO>  getDepositRecord(Long bizId);

    /**
     * 查询小区分户清册
     * @param bizId 业务主键
     * @return
     */
    List<GwjCommunityHouseholdHouseRecordDTO> getCommunityHouseholdRecord(Long bizId);

    /**
     * 签署意见
     * @param businessLog 日志参数
     */
    void signOpinion(GwjDepositBusinessLog businessLog);

    /**
     * 送件
     * @param businessLog 日志参数
     */
    void send(GwjDepositBusinessLog businessLog);

    /**
     * 提交
     * @param submitRequest 提交参数
     */
    void submitBusiness(GwjUnitDepositSubmitRequest submitRequest);

    /**
     * 业务修改
     * @param editRequest 修改参数
     */
    void editBusiness(GwjUnitDepositEditRequest editRequest);

    /**
     * 查询基础楼栋信息
     * @param communityId 社区主键
     * @return
     */
    List<GwjBaseBuild> getGwjBaseBuildDetailList(Long communityId);

    /**
     * 选择楼栋
     * @param bizId 业务主键
     * @param buildIds 楼栋主键
     */
    void chooseBaseBuild(Long bizId, Long[] buildIds);

    /**
     * 财务对账
     * @param bizId 业务主键
     */
    void financeCheck(Long bizId);

    /**
     * 根据标准计算楼栋房屋
     * @param gwjCalculateRequest 计算标准
     */
    void calculateHouse(GwjCalculateRequest gwjCalculateRequest);

    /**
     * 回退
     * @param businessLog 回退信息
     */
    void fallback(GwjDepositBusinessLog businessLog);

    /**
     * 业务详情
     * @param bizId 业务主键
     * @return
     */
    GwjUnitDepositDetailDTO getDetail(Long bizId);

    /**
     * 删除案例
     * @param bizId 业主主键
     * @return
     */
    int removeBusiness(Long bizId);

    /**
     * 删页
     * @param bizId 业务主键
     */
    void deleteBusinessData(Long bizId);

    /**
     * 资金分户房屋列表头部
     * @param gwjDepositBusinessHouse
     * @return
     */
    GwjDepositBusinessHouseTopDTO getHouseDetailTop(GwjDepositBusinessHouse gwjDepositBusinessHouse);

    /**
     * 查询缴存清册头部
     * @param bizId 业务主键
     * @return
     */
    GwjDepositRecordTopDTO getDepositRecordTop(Long bizId);

    /**
     * 查询小区分户清册头部
     * @param bizId 业务主键
     * @return
     */
    GwjCommunityHouseholdRecordTopDTO getCommunityHouseholdRecordTop(Long bizId);

    /**
     * 资金分户修改房屋缴费面积
     * @param calculateHouseRequest 缴费免息参数
     */
    void editCalculateHouse(GwjUnitDepositEditCalculateHouseRequest calculateHouseRequest);

    /**
     * 导入房屋信息
     * @param file 导入文件
     * @param bizId 业务主键
     * @return
     */
    String importHouseInfo(MultipartFile file, Long bizId);

    /**
     * 修改业务小区与楼栋信息
     * @param editRequest 修改参数
     */
    void editCommunityAndBuild(GwjUnitDepositCommunityAndBuildEditRequest editRequest);

    /**
     * 删除楼栋
     * @param bizId 业务主键
     * @param bizBuildIds 业务楼栋主键
     */
    void deleteBuildData(Long bizId, Long[] bizBuildIds);

    /**
     * 修改业务金额缴费标准
     * @param calculateRequest 修改参数
     */
    void editMoneyCalculate(GwjUnitDepositEditMoneyCalculateRequest calculateRequest);


    /**
     * 修改业务楼栋
     * @param calculateRequest 修改参数
     */
    void editBuildCalculateAndBuildType(GwjUnitDepositEditBuildCalculateRequest calculateRequest);

    /**
     * 创建公用户楼栋
     * @param gwjPublicAccountRequest 创建参数
     */
    void createPublicBuild(GwjPublicAccountRequest gwjPublicAccountRequest);

    /**
     * 房屋维护-加入选择
     * @param bizHouseIds 业务房屋主键
     * @param bizId 业务主键
     */
    void houseMaintainConfirmSelect(Long[] bizHouseIds, Long bizId);

    /**
     * 房屋维护-取消选择
     * @param bizHouseIds 业务房屋主键
     * @param bizId 业务主键
     */
    void houseMaintainCancelSelect(Long[] bizHouseIds, Long bizId);

    /**
     * 创建公用户房屋
     * @param gwjPublicAccountRequest 创建公用房屋参数
     */
    void createPublicHouse(GwjPublicAccountRequest gwjPublicAccountRequest);

    /**
     * 编辑公用户房屋
     * @param houseRequests 公用户房屋修改参数
     */
    void updatePublicHouse(List<GwjPublicBusinessHouseRequest> houseRequests);

    /**
     * 删除公用户房屋
     * @param bizHouseIds 业务房屋主键
     * @param bizId 业务主键
     */
    void deletePublicHouse(Long[] bizHouseIds, Long bizId);
}
